/**
 * 137. 只出现一次的数字 II
 */
class Solution8 {
    public int singleNumber(int[] nums) {
        int ret = 0;
        // 依次修改ret第i位的比特位
        for(int i = 0; i <= 31; i++) {
            int sum = 0;
            // 统计比特位为第i位时的和
            for(int x : nums) {
                if((((x >> i) & 1) == 1)) {
                    sum += 1;
                }
            }
            // 把sum%3放进ret中的比特位
            sum %= 3;
            if(sum == 1) {
                ret = ret | (1 << i);
            }
        }

        return ret;
    }
}